package jech913.basic;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class _07HelloGenericServlet extends GenericServlet{

	// 지금까지 서블릿 클래스를 작성할 때 Servlet 인터페이스를 구현해서 사용했음.
	// Servlet 인터페이스의 모든 메서드를 구현하려면 
	// 손이 많이가고 귀찮고 불편함.
	
	// 추상 클래스인 GenericServlet 클래스를 이용하면 이런 불편함이 제거됨. 
	// 이 클래스에는 service, init, getServlet 메서드를 미리 구현해 두었기 때문에
	// Servlet 인터페이스를 사용했을 때의 귀찮음은 제거됨. 
	// 물론 자주 사용하는 클래스는 아님
	
	// 웹 어플리케이션은 HTTP 프로토콜 기반에서 실행되기 때문에, 서블릿 역시 
	// HTTP 프로토콜을 지원해야 함. 
	// 즉, HTTP가 제공하는 기능(쿠키, 세션 등)을 이용할 수 있어야 함.
	
	// 따라서, 기존의 GenericServlet에 HTTP처리기능을 추가시킨 HttpServlet을 
	// 이용하면 이러한 요구사항 대부분이 해결 됨.
	
	// GenericServlet  vs HttpServlet
	// 요청/응답 처리시 ServletRequest/ServletResponse가  
	// HttpServletRequest/HttpServletResponse로 바뀜. 
	// service 메서드도 일부 변경됨. Http프로토콜이 제공하는 메서드들도 서블릿에서 처리 가능
	// 즉, (get, post, head, put, trace, options, delete)등은 
	// do~로 시작하는 메서드로 처리하도록 변경 됨.
	
	// HttpServlet 사용시 주의사항! 
	// HttpServlet을 이용해서 servlet을 작성하는 경우 
	// : service 메서드는 따로 재 정의할 필요 없음 
	// 단, Http 처리 메서드인 get, post 를 구현한 doGet, doPost 메서드만 재 정의 하는 것을 추천
	
	//HttpServlet에 추가된 메서드
	//req.getContext
	//req.getCookie
	//req.getHeader
	//req.getMethod
	//req.getQueryString
	//req.getRequestURI
	//req.getRequestURL
	
	//res.addCookie
	//res.addHeader
	//res.sendRedirect
	
	
	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		System.out.println("Hello, GenericServlet");
	}

	
	
}
